import java.util.ArrayList;
import java.util.Random;

public class Objednavka {
	/** Id prekladiste, na ktere ma byt objednavka zaslana */
	int idPrekladiste;
	/** id hospody */
	int idHospody;
	int objemPiva;
	int hodina;

	public int getIdPrekladiste() {
		return idPrekladiste;
	}

	public void setIdPrekladiste(int idPrekladiste) {
		this.idPrekladiste = idPrekladiste;
	}

	public int getIdHospody() {
		return idHospody;
	}

	public void setIdHospody(int idHospody) {
		this.idHospody = idHospody;
	}

	public int getObjemPiva() {
		return objemPiva;
	}

	public void setObjemPiva(int objemPiva) {
		this.objemPiva = objemPiva;
	}

	public int getHodina() {
		return hodina;
	}

	public void setHodina(int hodina) {
		this.hodina = hodina;
	}

	/**
	 * Konstruktor objednavky
	 * 
	 * @param idPrekladiste
	 *            Id prekladiste kde bude objednavka vzrizena
	 * @param idHospody
	 *            Id mesta ktere poslalo objednavku
	 * @param objemPiva
	 *            objem piva o ktery v objednavce jde
	 * @param hodina
	 *            hodina kdy bude objednavka poslana
	 */
	public Objednavka(int idPrekladiste, int idHospody, int objemPiva,
			int hodina) {
		this.idPrekladiste = idPrekladiste;
		this.idHospody = idHospody;
		this.objemPiva = objemPiva;
		this.hodina = hodina;
	}

	/**
	 * Metoda, ktera vypise objednavku.
	 * 
	 */
	public void vypisObjednavku() {
		int z = this.getIdHospody();
		int kam = this.getIdPrekladiste();
		int omjemPiva = this.getObjemPiva();
		int hodina = this.getHodina();
		System.out.println("odkud: " + z + ", kam: " + kam + ", objem piva: "
				+ omjemPiva + "[hl/sudu], v: " + hodina + ":00");
	}

	/**
	 * Tato metoda vytvori list objednavek pro vsechny hospody
	 * 
	 * @return List Objednavek
	 */
	public static ArrayList<Objednavka> generujObjednavky() {
		Random generatorCisel = new Random();
		ArrayList<Objednavka> listObjednavek = new ArrayList<Objednavka>();
		int pocetHospod1 = (int) (Aplikace.POCET_HOSPOD * 0.25);// 25% hospod
		int pocetHospod2 = (int) (Aplikace.POCET_HOSPOD * 0.25);// 25% hospod
		int pocetHospod3 = (int) (Aplikace.POCET_HOSPOD * 0.20);// 20% hospod
		int pocetHospod4 = (int) (Aplikace.POCET_HOSPOD * 0.15);// 15% hospod
		int pocetHospod5 = (int) (Aplikace.POCET_HOSPOD * 0.10);// 10% hospod
		int pocetHospod6 = (int) (Aplikace.POCET_HOSPOD * 0.05);// 5% hospod

		for (int i = 0; i < Aplikace.POCET_HOSPOD; i++) {
			// osetreni pridani manualni objednavky do listu
			for (int j = 0; j < Aplikace.listObjednavek.size(); j++) {
				if (i == Aplikace.listObjednavek.get(j).idHospody)
					continue;
			}
			int skupina = generatorCisel.nextInt(6);
			int objemPiva = -1;
			int idPrekladiste = -1;
			int idHospody = i;
			boolean opakovani = false;
			int hodina = 0;
			switch (skupina) {

			case 0:
				// Objednavky jednoho sudu/hl pro 25% hospod
				if (pocetHospod1 > 0) {
					objemPiva = 1;
					idPrekladiste = Aplikace.hospody.get(i).cestaDoPrekladiste[Aplikace.hospody
							.get(i).cestaDoPrekladiste.length - 1];

					hodina = -1;
					while (!(hodina > 7 && hodina < 17)) {
						hodina = (int) ((generatorCisel.nextGaussian() * 4 + 10));
					}
					pocetHospod1--;
					break;
				} else {
					skupina = 1;
				}
			case 1:
				// Objednavky dvou sudu/hl pro 25% hospod
				if (pocetHospod2 > 0) {
					objemPiva = 2;
					idPrekladiste = Aplikace.hospody.get(i).cestaDoPrekladiste[Aplikace.hospody
							.get(i).cestaDoPrekladiste.length - 1];
					hodina = -1;
					while (!(hodina > 7 && hodina < 17)) {
						hodina = (int) ((generatorCisel.nextGaussian() * 4 + 10));
					}
					pocetHospod2--;
					break;
				} else {
					skupina = 2;
				}

			case 2:
				// Objednavky tri sudu/hl pro 20% hospod
				if (pocetHospod3 > 0) {
					objemPiva = 3;
					idPrekladiste = Aplikace.hospody.get(i).cestaDoPrekladiste[Aplikace.hospody
							.get(i).cestaDoPrekladiste.length - 1];
					hodina = -1;
					while (!(hodina > 7 && hodina < 17)) {
						hodina = (int) ((generatorCisel.nextGaussian() * 4 + 10));
					}
					pocetHospod3--;
					break;
				} else {
					skupina = 3;
				}
			case 3:
				// Objednavky ctyr sudu/hl pro 15% hospod
				if (pocetHospod4 > 0) {
					objemPiva = 4;
					idPrekladiste = Aplikace.hospody.get(i).cestaDoPrekladiste[Aplikace.hospody
							.get(i).cestaDoPrekladiste.length - 1];
					hodina = -1;
					while (!(hodina > 7 && hodina < 17)) {
						hodina = (int) ((generatorCisel.nextGaussian() * 4 + 10));
					}
					pocetHospod4--;
					break;
				} else {
					skupina = 4;
				}
			case 4:
				// Objednavky peti sudu/hl pro 10% hospod
				if (pocetHospod5 > 0) {
					objemPiva = 5;
					idPrekladiste = Aplikace.hospody.get(i).cestaDoPrekladiste[Aplikace.hospody
							.get(i).cestaDoPrekladiste.length - 1];
					hodina = -1;
					while (!(hodina > 7 && hodina < 17)) {
						hodina = (int) ((generatorCisel.nextGaussian() * 4 + 10));
					}
					pocetHospod5--;
					break;
				} else {
					skupina = 5;
				}
			case 5:
				// Objednavky sesti sudu/hl pro 5% hospod
				if (pocetHospod6 > 0) {
					objemPiva = 6;
					idPrekladiste = Aplikace.hospody.get(i).cestaDoPrekladiste[Aplikace.hospody
							.get(i).cestaDoPrekladiste.length - 1];
					hodina = -1;
					while (!(hodina > 7 && hodina < 17)) {
						hodina = (int) ((generatorCisel.nextGaussian() * 4 + 10));
					}
					pocetHospod6--;
					break;
				} else {
					skupina = 1;
					i--;
					opakovani = true;

				}

			}
			if (!opakovani) {
				listObjednavek.add(new Objednavka(idPrekladiste, idHospody,
						objemPiva, hodina));
			}

		}
		return listObjednavek;
	}

	@Override
	public String toString() {
		return "Objednavka [idPrekladiste=" + idPrekladiste + ", idHospody="
				+ idHospody + ", objemPiva=" + objemPiva + ", hodina=" + hodina
				+ "]";
	}

}